home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / fb386 / tool / roman4 / roman4.doc < prev    next >
Text File  |  1995-07-19  |  10KB  |  243 lines

  1. -------------------------------------------------------------------------------
  2.  ローマ字カナ変換プログラム by たくりん
  3. -------------------------------------------------------------------------------
  4.  
  5. ◆はじめに
  6.  
  7.  これは、大学のソフトウェア実験の課題で作成したプログラムです。プログラミン
  8. グの基礎を学ぶのが目的であるため、実用的な価値はありませんが、BASIC初心
  9. 者のかたがた、もしくは、同じような課題を大学で与えられたかたにとって、何らか
  10. の参考になるのではないかと思い、応募いたします。
  11.  
  12. ◆概要
  13.  
  14.  状態遷移についての課題で作成したもので、ローマ字をカナに変換するプログラム
  15. です。デフォルトでは、キーボードからの入力を、スクリーンに出力するのですが、
  16. 入出力をファイルに変更するのも簡単にできるようにしています。
  17.  フリコレ8に収録されたもののバージョンアップではありますが、ソフトウェア設
  18. 計の段階から作り直しました。
  19.  
  20. ◆環境
  21.  
  22. ◇動作環境
  23.  FM TOWNS/FM TOWNS II 全機種
  24.  F-BASIC386 V2.1L10 以降
  25.  
  26. ◇開発環境&動作確認
  27.  FM TOWNS II MA20(RAM 10MB)
  28.   + HDD 520MB(ELECOM Fixell in TOWNS)
  29.  TownsOS V2.1L31
  30.   + F-BASIC386コンパイラ V2.1L10
  31.  
  32. ◆ファイル
  33.  
  34.   roman4.bas  :BASICプログラム・ソースファイル
  35.   roman4.doc  :説明書(このファイル)
  36.   roman4.ggg  :概要書
  37.  
  38. ◆使用方法
  39.  
  40.  F-BASIC386を立ち上げ、“roman4.bas”を実行してください。
  41. データ起動の設定をしてあるかたは、TownsMENUで、直接、“roman4.
  42. bas”をダブルクリックすれば、実行できます。
  43.  
  44.  実行すると、下の表示がされたあと、キーボードからの入力待ちになります。
  45.  
  46.   ローマ字カナ変換プログラム  By たくりん
  47.   入力されたローマ字文を、半角カナ文に変換して出力する。
  48.   変換対象は半角英字のみで、大文字小文字の区別はしない。
  49.   半角英字でない文字は、そのまま出力する。
  50.   改行のみの入力、もしくはエラーが起きると終了する。
  51.  
  52.  キーボードから半角英字で何かローマ字の文章を入力して、リターンキーを押すと、
  53. 入力文と変換後の文をスクリーンに出力します。出力すると、再びキーボードからの
  54. 入力待ちになります。下に例を示します。
  55.  
  56.   watashiha efuemu taunzu desu            (キーボードから入力)
  57.   入力>watashiha efuemu taunzu desu       (入力文を出力)
  58.   変換>ワタシハ エフエム タウンズ デス                (変換後の文を出力)
  59.   _                                       (入力待ち)
  60.  
  61.  終了したくなったら、入力待ちの時に、リターンキーのみを押して下さい(BRE
  62. AKキーでの中断は禁止してあります)。下の表示をしたあと、プログラムを終了し
  63. ます。
  64.  
  65.   入出力デバイスをクローズして終了します。
  66.  
  67.  何かエラーが起きた場合は、下のような表示をして、プログラムを終了します。
  68.  
  69.   エラー No. XX が起きました。
  70.   入出力デバイスをクローズして終了します。
  71.  
  72. ◆ローマ字カナ変換について
  73.  
  74. ◇ローマ字カナ対応表
  75.  
  76.  ローマ字とカナの対応は、TownsMENUディクショナリに載っている表をも
  77. とにしました(一部相違あり)。以下に、一覧表を示します。
  78.  
  79.     母音
  80.      A    I    U    E    O    ア    イ    ウ    エ    オ  
  81.  
  82.     子音一つと母音
  83.     LA   LI   LU   LE   LO    ァ    ィ    ゥ    ェ    ォ  
  84.     KA   KI   KU   KE   KO    カ    キ    ク    ケ    コ  
  85.     SA   SI   SU   SE   SO    サ    シ    ス    セ    ソ  
  86.     TA   TI   TU   TE   TO    タ    チ    ツ    テ    ト  
  87.     NA   NI   NU   NE   NO    ナ    ニ    ヌ    ネ    ノ  
  88.     HA   HI   HU   HE   HO    ハ    ヒ    フ    ヘ    ホ  
  89.     MA   MI   MU   ME   MO    マ    ミ    ム    メ    モ  
  90.     YA   YI   YU   YE   YO    ヤ    イ    ユ    イェ   ヨ  
  91.     RA   RI   RU   RE   RO    ラ    リ    ル    レ    ロ  
  92.     WA   WI   WU   WE   WO    ワ    ウィ   ウ    ウェ   ヲ  
  93.     GA   GI   GU   GE   GO    ガ   ギ   グ   ゲ   ゴ 
  94.     ZA   ZI   ZU   ZE   ZO    ザ   ジ   ズ   ゼ   ゾ 
  95.     DA   DI   DU   DE   DO    ダ   ヂ   ヅ   デ   ド 
  96.     BA   BI   BU   BE   BO    バ   ビ   ブ   ベ   ボ 
  97.     PA   PI   PU   PE   PO    パ   ピ   プ   ペ   ポ 
  98.     FA   FI   FU   FE   FO    ファ   フィ   フ    フェ   フォ 
  99.     JA   JI   JU   JE   JO    ジャ  ジ   ジュ  ジェ  ジョ
  100.     VA   VI   VU   VE   VO    ヴァ  ヴィ  ヴ   ヴェ  ヴォ
  101.  
  102.     子音とYと母音
  103.     LYA  LYI  LYU  LYE  LYO   ャ    ィ    ュ    ェ    ョ  
  104.     KYA  KYI  KYU  KYE  KYO   キャ   キィ   キュ   キェ   キョ 
  105.     SYA  SYI  SYU  SYE  SYO   シャ   シィ   シュ   シェ   ショ 
  106.     TYA  TYI  TYU  TYE  TYO   チャ   チィ   チュ   チェ   チョ 
  107.     CYA  CYI  CYU  CYE  CYO   チャ   チィ   チュ   チェ   チョ 
  108.     NYA  NYI  NYU  NYE  NYO   ニャ   ニィ   ニュ   ニェ   ニョ 
  109.     HYA  HYI  HYU  HYE  HYO   ヒャ   ヒィ   ヒュ   ヒェ   ヒョ 
  110.     FYA  FYI  FYU  FYE  FYO   フャ   フィ   フュ   フェ   フョ 
  111.     MYA  MYI  MYU  MYE  MYO   ミャ   ミィ   ミュ   ミェ   ミョ 
  112.     RYA  RYI  RYU  RYE  RYO   リャ   リィ   リュ   リェ   リョ 
  113.     GYA  GYI  GYU  GYE  GYO   ギャ  ギィ  ギュ  ギェ  ギョ
  114.     ZYA  ZYI  ZYU  ZYE  ZYO   ジャ  ジィ  ジュ  ジェ  ジョ
  115.     JYA  JYI  JYU  JYE  JYO   ジャ  ジィ  ジュ  ジェ  ジョ
  116.     DYA  DYI  DYU  DYE  DYO   ヂャ  ヂィ  ヂュ  ヂェ  ヂョ
  117.     BYA  BYI  BYU  BYE  BYO   ビャ  ビィ  ビュ  ビェ  ビョ
  118.     PYA  PYI  PYU  PYE  PYO   ピャ  ピィ  ピュ  ピェ  ピョ
  119.  
  120.     子音とHと母音
  121.     SHA  SHI  SHU  SHE  SHO   シャ   シ    シュ   シェ   ショ 
  122.     CHA  CHI  CHU  CHE  CHO   チャ   チ    チュ   チェ   チョ 
  123.     THA  THI  THU  THE  THO   テャ   ティ   テュ   テェ   テョ 
  124.     DHA  DHI  DHU  DHE  DHO   デャ  ディ  デュ  デェ  デョ
  125.  
  126.     撥音(ン)
  127.     N + N  または  N + N以外の子音
  128.  
  129.     ツ
  130.     TSU
  131.  
  132.     促音(ッ)
  133.     MM LL KK YY CC など、N以外の子音のくりかえし
  134.  
  135.     長音
  136.     X  または  「-」を直接入力
  137.  
  138. ◇変換アルゴリズム
  139.  
  140.  今、「A」が入力されたとします。その前に子音がなければ、「ア」として良いの
  141. ですが、その前に子音があるなら、それと合わせてカナに変換しなければなりません。
  142. 入力だけで処理が決まるのではなく、そのときの状態によって入力の解釈が異なりま
  143. す。そこで、状態遷移という概念を導入しなければなりません。
  144.  
  145.  入力が同じ「A」でも、その前に保留されている(変換が済んでいない)文字によ
  146. り、処理(変換結果)が異なります。また、保留の内容が同じでも、入力された母音
  147. により、例外的に、処理が異なる場合もあります。下に例を示します。
  148.  
  149.  ・保留なし+「A」:「ア」に変換、保留はゼロ
  150.  ・「K」 +「A」:「カ」に変換、保留はゼロ
  151.  ・「F」 +「A」:「ファ」に変換、保留はゼロ
  152.  ・「KY」+「A」:「キャ」に変換、保留はゼロ
  153.  ・「SH」+「A」:「シャ」に変換、保留はゼロ
  154.  ・「TS」+「A」:「T」は捨てて、「SA」を「サ」に変換、保留はゼロ
  155.  ・「TS」+「U」:「ツ」に変換、保留はゼロ
  156.  
  157.  また、子音が入力されたときも、単にそれを保留していけば良いというわけではあ
  158. りません。前の文字との組み合わせが、あり得る場合や、あり得ない場合、また、促
  159. 音「ン」や撥音「ッ」の処理も例外的に行わなければなりません。下に例を示します。
  160.  
  161.  ・保留なし+「K」:「K」を保留
  162.  ・「S」 +「K」:「S」は捨てて、「K」のみを保留
  163.  ・「N」 +「K」:「N」を促音「ン」に変換、「K」を保留
  164.  ・「K」 +「K」:「KK」を撥音「ッ」に変換、「K」を保留
  165.  ・「S」 +「H」:「SH」を保留
  166.  ・「K」 +「Y」:「KY」を保留
  167.  ・「KY」+「H」:「KY」は捨てて、「H」のみを保留
  168.  ・「NY」+「H」:「N」を促音「ン」に変換、「Y」は捨てて、「H」を保留
  169.  ・「SH」+「H」:「S」は捨てて、「HH」を撥音「ッ」に変換、「H」を保留
  170.  ・「TS」+「H」:「T」は捨てて、「SH」を保留
  171.  
  172.  一方、コード変換について考えてみます。保留なしの状態で、今、アルファベット
  173. が一文字入力されたとします。その文字が母音なら、カナに変換するべきであり、子
  174. 音なら、それ以降の文字を待たなければなりません。これを処理するのに、IF文の
  175. 羅列などをしては最悪です。そこで、コンテントアドレッシング(内容をアドレスに
  176. 使う)という方法があります。
  177.  
  178.  まず、次のように、iという0~25の値を求めます。
  179.  
  180.   i=(一文字目のASCIIコード)-(「A」のASCIIコード)
  181.  
  182.  配列A(i)には、iが母音の所には対応するカナの文字(文字列)を、そうでな
  183. い所には特殊な値(例えば-1)を入れておきます。そうすれば、次のように、母音
  184. の決定ができます。
  185.  
  186.   if A(i)<0 then
  187.      次の文字を見に行く
  188.   else
  189.      カナ=A(i)の示す文字列
  190.   endif
  191.  
  192.  次に、一文字目が子音であり、次の文字を見てカナを決めるには、さらに、jとい
  193. う値を求めて、二次元の配列B(i,j)を引いて、子音+母音の決定ができます。
  194.  
  195.   j=(二文字目のASCIIコード)-(「A」のASCIIコード)
  196.  
  197.   if B(i,j)<0 then
  198.      あり得ない組み合わせ。または、その次の文字を見に行く
  199.   else
  200.      カナ=B(i,j)の示す文字列
  201.   endif
  202.  
  203.  この延長で、三文字からなるローマ字の場合、三次元の配列を考えれば良いことに
  204. なります。
  205.  
  206. ◆ソースについて
  207.  
  208.  変数の説明や、コメントなどを、詳しく記してありますので、興味のあるかたは、
  209. じっくりお読みください。
  210.  
  211.  このプログラムでは、上の例のように、単純に配列A(i)やB(i,j)ですぐ
  212. 変換しているわけではありません。
  213.  また、三次元の配列は使わずに、二次元配列の値を添え字として、さらに二次元の
  214. 文字型配列を参照することにより、同様の機能を実現しています。
  215.  というのは、一次元ならばまだ良いのですが、二次元や三次元の文字型配列となる
  216. と、無駄が多く、書くのも面倒なので、少し工夫をしてみました(かえって分かりに
  217. くくなったともいえますが)。どんな機構になっているか解読してみるのも、勉強に
  218. なると思います。
  219.  
  220.  冒頭に書いたように、このプログラムが、大学で同じような課題を与えられたかた
  221. のために、お役に立つことがあれば、嬉しいです。しかし、その際、このプログラム
  222. をそのまま提出したり、変数名だけ変えて提出するようなことは、避けてください。
  223.  プログラムの盗用とみなされるようなことをすると、一発で単位を落とされると思
  224. います。それで進級できなくても、本人の責任ですので、ご了承ください。
  225.  
  226. ◆使用、再配布等について
  227.  
  228.  本作はフリーソフトウェアです。無償である限り、自由に配布/転載/使用して下
  229. さって構いません。その際、ドキュメントファイル及び必須ファイル(あれば)を付
  230. 属して下さい。また、内容を改変した物や二次利用した作品は、その旨をドキュメン
  231. ト等に明示して下さい。
  232.  また、本作について(鑑賞料やプレイ料金等)金銭受領をする場合や、本作及び二
  233. 次利用した作品を有償配布する場合には、事前にご連絡下さい。
  234.  
  235.  本作品の使用、配布によるいかなる損害にも、作者は責任を負いません。
  236.  
  237.  ◇連絡先
  238.  
  239.  〒262 千葉県千葉市花見川区長作町1682-312 金子方 たくりん宛
  240.  
  241.  作品の感想、質問、バグ報告、改善提案等、作者への連絡は上記まで。
  242.  
  243.